#!/bin/bash
#
# 更新前端应用代码
# 作者: 知汛项目组
# 最后更新: 2024-11-07

set -e

# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

# 默认配置
PROJECT_DIR="/home/water/source_code/zhixun-uni-app"
BRANCH="main"
SKIP_DEPS=false

# 显示帮助
show_help() {
    cat << EOF
用法: $0 [选项]

更新前端应用代码并重新部署

选项:
    --project-dir DIR  项目目录（默认: $PROJECT_DIR）
    --branch BRANCH    Git分支（默认: main）
    --skip-deps        跳过依赖安装
    --help             显示此帮助信息

示例:
    # 更新并重新部署
    bash $0

    # 从指定分支更新
    bash $0 --branch develop

    # 跳过依赖安装（加速部署）
    bash $0 --skip-deps
EOF
}

# 解析参数
while [[ $# -gt 0 ]]; do
    case $1 in
        --project-dir)
            PROJECT_DIR="$2"
            shift 2
            ;;
        --branch)
            BRANCH="$2"
            shift 2
            ;;
        --skip-deps)
            SKIP_DEPS=true
            shift
            ;;
        --help)
            show_help
            exit 0
            ;;
        *)
            echo -e "${RED}未知参数: $1${NC}"
            show_help
            exit 1
            ;;
    esac
done

echo "======================================"
echo "更新前端应用"
echo "======================================"
echo "项目目录: $PROJECT_DIR"
echo "分支: $BRANCH"
echo ""

# 检查项目目录
if [ ! -d "$PROJECT_DIR" ]; then
    echo -e "${RED}✗ 项目目录不存在: $PROJECT_DIR${NC}"
    exit 1
fi

cd "$PROJECT_DIR"

# 检查Git仓库
if [ ! -d ".git" ]; then
    echo -e "${RED}✗ 不是Git仓库${NC}"
    exit 1
fi

# 拉取最新代码
echo -e "${YELLOW}[1/5] 拉取最新代码...${NC}"

# 保存本地修改（如果有）
if ! git diff-index --quiet HEAD --; then
    echo -e "${YELLOW}发现本地修改，暂存中...${NC}"
    git stash
    STASHED=true
else
    STASHED=false
fi

# 切换分支
if [ "$(git branch --show-current)" != "$BRANCH" ]; then
    echo -e "${YELLOW}切换到分支: $BRANCH${NC}"
    git checkout "$BRANCH"
fi

# 拉取代码
git pull origin "$BRANCH"

if [ $? -ne 0 ]; then
    echo -e "${RED}✗ 拉取代码失败${NC}"
    exit 1
fi

# 恢复本地修改
if [ "$STASHED" = true ]; then
    echo -e "${YELLOW}恢复本地修改...${NC}"
    git stash pop
fi

echo -e "${GREEN}✓ 代码已更新${NC}"

# 安装依赖
if [ "$SKIP_DEPS" = false ]; then
    echo ""
    echo -e "${YELLOW}[2/5] 安装/更新依赖...${NC}"
    npm install
    echo -e "${GREEN}✓ 依赖已更新${NC}"
else
    echo ""
    echo -e "${YELLOW}[2/5] 跳过依赖安装${NC}"
fi

# 构建前端
echo ""
echo -e "${YELLOW}[3/5] 构建前端...${NC}"
npm run build:h5

if [ $? -ne 0 ]; then
    echo -e "${RED}✗ 构建失败${NC}"
    exit 1
fi

echo -e "${GREEN}✓ 构建成功${NC}"

# 重启容器
echo ""
echo -e "${YELLOW}[4/5] 重启Docker容器...${NC}"

docker-compose restart zhixun-app

if [ $? -ne 0 ]; then
    echo -e "${RED}✗ 重启失败${NC}"
    exit 1
fi

# 等待服务启动
echo -e "${YELLOW}等待服务启动...${NC}"
sleep 5

echo -e "${GREEN}✓ 服务已重启${NC}"

# 验证服务
echo ""
echo -e "${YELLOW}[5/5] 验证服务...${NC}"

# 检查容器状态
if docker ps | grep -q zhixun-app; then
    echo -e "${GREEN}✓ 容器运行正常${NC}"
else
    echo -e "${RED}✗ 容器未运行${NC}"
    exit 1
fi

# 检查HTTP响应
if curl -s -o /dev/null -w "%{http_code}" "http://localhost:8081" | grep -q "200\|301\|302"; then
    echo -e "${GREEN}✓ HTTP服务正常${NC}"
else
    echo -e "${YELLOW}⚠ HTTP服务响应异常${NC}"
fi

echo ""
echo -e "${GREEN}✓ 更新完成${NC}"
echo ""
echo "查看日志:"
echo "  docker logs -f zhixun-app"

